package chardemo;

import java.io.*;

public class TestDriverChar {

    public static void main(String[] args) throws IOException {
        System.out.println("=============文件输出流==FileOutputStream=====reader和writer==========================");
        test01();
        System.out.println("=============文件输出流==FileOutputStream=====关闭资源==========================");
        test02();
    }
    /**
     * 字节流----文件输入输出流
     */

    public  static  void test01() throws IOException {
        //方便资源回收
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;

        try {
            //创建文件输入流
           fileInputStream = new FileInputStream("E:\\temp\\filesdemo\\temp100.txt");
            //如果文件不存在,FileOutputStream会自动创建一个文件，但是目录必须存在，否则出错
            //构造方法的第二个参数表示文件内容是否要接着写；默认false：不接着写；true：接着写
          fileOutputStream = new FileOutputStream("E:\\temp\\filesdemo\\temp100_1.txt",true);

            //存储输入流读取数据的字节数组
            byte[] bytes = new byte[1024];

            //读取字节数组长度
            int len = 0;
            do {
                //每次新创建一个数组
                bytes = new byte[1024];
                //读取文件内容到字节数组中-----//writer写文件
                len = fileInputStream.read(bytes);

                if (len != -1) {//文件输出内容输出一次，去掉则有两次内容输出
                    String str = new String(bytes);
                    System.out.println(str);

                    //使用文件输出流将其写出到外部文件中
                    fileOutputStream.write(bytes,0,len);
                }}
                while (len != -1) ;
            }catch(Exception e){
                e.fillInStackTrace();
            }finally {
            //关闭资源
            try {
                if (fileInputStream !=null){
                    fileInputStream.close();
                }if (fileOutputStream != null){
                    fileOutputStream.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
        }


    /**
     * 字节流----文件输入输出流
     * reader
     */

    public  static  void test02() throws IOException {

        try {
            //文件Reader输入流
            /**
             * 如果在try()括号中初始化了一些变量对象，则try-catch处理机制会自动进行资源回收
             * 条件：
             */
            InputStreamReader inputStreamReader = new InputStreamReader
                    (new FileInputStream
                            ("E:\\temp\\filesdemo\\temp100.txt"),"utf-8");//最后是编码值

            //创建文件输入流
            /*FileInputStream fileInputStream = new FileInputStream
            ("E:\\temp\\filesdemo\\temp100.txt");*/
            //如果文件不存在,FileOutputStream会自动创建一个文件，但是目录必须存在，否则出错
            //构造方法的第二个参数表示文件内容是否要接着写；默认false：不接着写；true：接着写
            /*FileOutputStream fileOutputStream = new FileOutputStream
            ("E:\\temp\\filesdemo\\temp100_1.txt",true);*/

            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
                    new FileOutputStream
                            ("E:\\temp\\filesdemo\\temp100_1.txt",true),"utf-8");//最后是编码值
            //存储输入流读取数据的字节数组
            char[] chars = new char[1024];

            //读取字节数组长度
            int len = 0;
            do {
                //每次新创建一个数组
                //inputStreamReader--读入char类型
                chars = new char[1024];

                //读取文件内容到字节数组中-----//writer写文件
                len = inputStreamReader.read(chars);

                if (len != -1) {//文件输出内容输出一次，去掉则有两次内容输出
                    String str = new String(chars);
                    System.out.println(str);

                    //使用文件输出流将其写出到外部文件中
                    outputStreamWriter.write(chars,0,len);
                }}
            while (len != -1) ;
        }catch(Exception e){
            e.fillInStackTrace();
        }finally {
            //关闭资源


        }
    }

}
